莫队 $+$ $bitset$.
我们可以用 $bitset$ 维护当前 $l,r$ 区间数的出现的状态,莫对依旧按照套路搞,然后来考虑怎么回答每一个询问。
对于操做 $1$ ,要求回答我们从当前区间能否找出 $a,b$ 使得其差为 $x$。
很显然,$a-b=x$ 等价于 $a=b+x$。
我们维护的是数的出现的状态,于是可以将当前的 $bitset$ 左移 $x$ 位,也就是让所有数都加上 $x$,然后与原 $bitset$ 做与运算,看看是否有一个 $a$ 出现,如果与的结果非 $0$ ,那么显然是有的,否则没有。
第二个操作有些不好办,我们再开一个 $bitset$ 集,对于一个出现过的数 $i$,在第二个 $bitset$ 集中记为 $N-i$。然后再来看操作要求,这次是让 $a+b=x$。
那么可以得到:
于是设一个数 $z$ ,表示 $N-a$ 。
然后:
移项得:
于是我们将第二个 $bitset$ 右移 $N-x$ 为,显然第二个 $bitset$ 集上的第 $i$ 位代表的就是第一个 $bitset$ 上的 $x-i$ 位。
然后,将两个 $bitset$ 与一下,看看是否同时存在 $a$ 和 $x-a$ 即可。
最后对于第三个操作,貌似bitset也不太好搞,那么直接暴力枚举因子就好了,复杂度 $O(\sqrt{n})$,放心不会炸。具体怎么暴力枚举呢?在 $1 - \sqrt{x}$ 的范围类枚举一个 $j$ ,如果 $x$ % $j==0$ 并且同时存在 $j$ 和 $x/j$,显然就有答案了。
Code:
1 |
|
本文标题:【题解】 小清新人渣的本愿 莫队+bitset luoguP3674
文章作者:Qiuly
发布时间:2019年02月13日 - 00:00
最后更新:2019年03月29日 - 13:54
原始链接:http://qiulyblog.github.io/2019/02/13/[题解]luoguP3674/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。